if (true) {
  var foo = "zce";
  // let bar = 'abc'   // let const 声明的变量在块中有作用域
}

console.log(foo);

/* for (var i = 0; i < 3; i++) {
  // 内外层同时使用 var 声明， var 声明没有作用域（直接定义在全局），因此内层被重新赋值
  for (var i = 0; i < 3; i++) {
    console.log(i);
  }
  console.log("内层结束 i = ", +i);
}

for (let i = 0; i < 3; i++) {
  for (let i = 0; i < 3; i++) {
    console.log(i);
  }
  console.log("内层结束 i = ", +i);
} */

// --------------------------------------------

// 循环注册事件
var elements = [{}, {}, {}];
/* for (var i = 0; i < elements.length; i++) {
  elements[i].onClick = function () {
    console.log(i);
  };
} */

// 解决方法：闭包
for (var i = 0; i < elements.length; i++) {
  /* elements[i].onClick = (function (i) {
    return function () {
      console.log(i);
    };
  })(i); */

  (function (i) {
    elements[i].onClick = function () {
      console.log(i);
    };
  })(i);
}

// let
// for (let i = 0; i < elements.length; i++) {
//   elements[i].onClick = function () {
//     console.log(i);
//   };
// }

elements[2].onClick();

// --------------------------------------------
for (let i = 0; i < 3; i++) {
  let i = "foo";
  console.log(i);
}
